package com.lazily.single_;


/**
 * @Author:  GZQ
 * @date:  2025/2/8 23:03
 * @description: 认识单例模式的实现方式 --> 饿汉式
 */

public class SingleTon01 {

	public static void main(String[] args) {
		// GirlFrined lanlan = new GirlFrined("兰兰");
		// GirlFrined xh = new GirlFrined("小仙女");

	// 	通过方法可以获取对象
	// 	GirlFrined instance = GirlFrined.getGirlFrined();
	// 	System.out.println(instance);
	//
	// 	GirlFrined instance2 = GirlFrined.getGirlFrined();
	// 	System.out.println(instance2);
	//
	// 	System.out.println(instance == instance2);

		System.out.println(GirlFrined.n1);

	}
}

// 有一个类, GirlFrined
// 只能有一个女朋友
class GirlFrined {

	private String name;

	public static int n1 = 100;

	// 为了能够在静态方法中, 返回 gf对象, 需要将其修饰为static
	// 单例对象, 通常是重量级的对象, 饿汉式可能造成创建了对象，但是没有使用，浪费内存
	private static GirlFrined gf = new GirlFrined("小仙女");

	// 如何保证我们只能创建一个 GirlFrined 对象
	// 步骤 [单例模式-饿汉式]
	// 1. 将构造器私有化
	// 2. 在类的内部直接创建对象 (该对象是static)
	// 3. 提供一个公共的static方法, 返回 gf 对象
	private GirlFrined(String name) {
		System.out.println("构造器被调用....");
		this.name = name;
	}

	public static GirlFrined getGirlFrined() {
		return gf;
	}

	@Override
	public String toString() {
		return "GirlFrined{" +
				"name='" + name + '\'' +
				'}';
	}
}
